home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
05 Programming
/
MUDRIV.4TH
< prev
next >
Wrap
Text File
|
2019-04-13
|
4KB
|
172 lines
scr #1
0> .( blazin' forth 91 system loader ) cr
1> view? off nomudrive forget thru
2> mount offset off
3> 3 .( thru ) load cr
4> 141 147 .( multidrive ) thru cr
5> 24 30 .( assembler ) thru cr
6> 4 23 .( utilities ) thru cr
7> 31 49 .( editor ) thru cr
8> 50 57 .( strings ) thru cr
9> 58 70 .( sid support ) thru cr
10> 71 104 .( vic support ) thru cr
11> 2 .( disk config ) load cr
12> 2 view? ! .( locate enabled ) cr
13> mudrive dclose save-forth
14>
15>
scr #2
0> ( disk drive configuration )
1> mudrive topblock off
2> 8 0 make1541 dr8
3> ( 9 1 make1541 dr9 )
4> 10 1 make1581 dr10
5> ( 11 3 make1581 dr11 )
6> 512 2 makereu dram
7>
8>
9>
10>
11>
12>
13>
14>
15>
scr #141
0> ( multidrive support 1 of 7 )
1> 5 constant #drv
2> variable curdrv curdrv off
3> variable topblock topblock off
4> create drvtbl #drv 10 * allot
5> drvtbl #drv 10 * erase
6>
7> : >drv ( offset == ; -- addr )
8> create c, does>
9> c@ swap 10 * drvtbl + + ;
10>
11> 0 >drv 'drv-open
12> 2 >drv 'drv-r/w
13> 4 >drv drv-data
14> 6 >drv lowblk
15> 8 >drv highblk
scr #142
0> ( multidrive support 2 of 7 )
1> : blk-exists ( scr# -- )
2> dup 0< swap topblock @ 1- > or
3> abort" illegal screen number" ;
4> : off-drv? ( scr# drv -- ? ) >r
5> r@ lowblk @ over >
6> r> highblk @ 1- rot < or ;
7> : find-drv ( scr# -- drv ) 0
8> begin 2dup off-drv? while 1+ repeat
9> swap drop ;
10> : set-drv ( scr# -- )
11> dup curdrv @ off-drv?
12> if dup blk-exists
13> dup find-drv dup curdrv !
14> 'drv-open @ execute
15> then drop ;
scr #143
0> ( multidrive support 3 of 7 )
1> create rfil hex 23 decimal c, ( #)
2> : drv-mount ( -- )
3> curdrv @ drv-data @
4> 13 close 15 close 15 2dup 0 0 (open) ioerr
5> ( 15 (cmdout) ( ioerr ." i0" cmdoff )
6> 13 swap over rfil 1 (open) ioerr ?disc ;
7> : fixblk ( addr scr# rwflag -- addr scr# rwflag )
8> swap curdrv @ lowblk @ - swap ;
9> hex
10> : reu-open ; ( to not used, leaves err chan open )
11> : reu-r/w ( addr scr# rwflag -- )
12> fixblk >r swap df02 ! 8 /mod 0400 dup df07 ! *
13> df04 ! df06 c! df09 off
14> r> if 0fd else 0fc then df01 c! ;
15> decimal
scr #144
0> ( multidrive support 4 of 7 )
1> : 1541-to ( addr scr# rwflag --
2> maxsecs addr sec trck drv rwflag )
3> fixblk to ; ( heheh use original to )
4>
5> : 1581-to ( addr scr# rwflag --
6> maxsecs addr sec trck drv rwflag )
7> fixblk >r 0 >r dup 390 <
8> if 40 1 >r
9> else 380 - 40 40 >r
10> then
11> rot rot dup 2 mod swap over -
12> 2* 2* + 2 pick /mod r> + r> r> ;
13> defer to
14> : 1541-open ['] 1541-to is to drv-mount ;
15> : 1581-open ['] 1581-to is to drv-mount ;
scr #145
0> ( multidrive support 5 of 7 )
1> : 15xx-r/w ( addr scr# flag -- )
2> ?disc to
3> 4 0 do 5 0 do 4 pick loop
4> >disc if .derr then
5> >r >r >r >r
6> 256 + r> 2+ 2 pick /mod r> + r> r> loop
7> 2drop 2drop 2drop ;
8> : read/write ( addr scr# flag -- )
9> over set-drv curdrv @ 'drv-r/w @ execute ;
10>
11> : mount curdrv @ 'drv-open @ execute ;
12> : bcopy ( from to how-many -- )
13> over + swap do i .
14> dup block i buffer 1024 cmove
15> update 1+ loop drop save-buffers ;
scr #146
0> ( multidrive support 6 of 7 )
1> : makedrv ( 'open 'r/w siz data slot -- )
2> >r r@ drv-data !
3> topblock @ r@ lowblk !
4> topblock +!
5> topblock @ r@ highblk !
6> r@ 'drv-r/w !
7> r@ 'drv-open !
8> r> lowblk @ create , does> @ offset ! ;
9> : make1541 ( dev# slot -- ) >r >r
10> ['] 1541-open ['] 15xx-r/w 166 r> r> makedrv ;
11> : make1581 ( dev# slot -- ) >r >r
12> ['] 1581-open ['] 15xx-r/w 790 r> r> makedrv ;
13> : makereu ( size slot -- ) >r
14> ['] reu-open ['] reu-r/w rot 0 r> makedrv ;
15>
scr #147
0> ( multidrive support 7 of 7 )
1>
2> : mudrive ['] read/write ['] r/w >body ! ;
3> : nomudrive ['] (r/w) ['] r/w >body ! ;
4> ( make sure to invoke "nomudrive" before reloading! )
5>
6>
7>
8>
9>
10>
11>
12>
13>
14>
15>